var dataAlimentos = new Object();
var arrAlimentos = new Array();
var lastsel3;
var cache = new Object();

function onFormulaDesarrolladaLoad(){
    initFormulaDesarrolladaDetailUI();

    //Listeners para cambio de paciente
    pacienteModel.removeIdChangedListener(pacienteDetailSelect, pacienteDetailUI);
    pacienteModel.removeIdChangedListener(pacienteEvaluacionSelect, evaluacionesModel);
    pacienteModel.removeIdChangedListener(pacienteEvalClinicaSelect, evalClinicasModel);
    pacienteModel.removeIdChangedListener(pacienteRiesgoSelect, riesgosModel);
    pacienteModel.removeIdChangedListener(pacienteToleranciaSelect, toleranciaModel);
    pacienteModel.removeIdChangedListener(pacienteAlimentacionHabitualSelect, alimentacionHabitualModel);
    
    pacienteModel.addIdChangedListener(pacienteFormulaDesarrolladaSelect, formulasDesarrolladasModel);

    //Listeners para formula desarrollada seleccionada
    formulasDesarrolladasModel.removeIdChangedListener(formulaDesarrolladaDetailSelect, formulasDesarrolladasDetailUI);
    formulasDesarrolladasModel.addIdChangedListener(formulaDesarrolladaDetailSelect, formulasDesarrolladasDetailUI);

    // Listener para recargar las formulas desarrolladas del paciente
    formulasDesarrolladasModel.removeOnSaveListener(cargarFormulasPacienteActual, {});
    formulasDesarrolladasModel.addOnSaveListener(cargarFormulasPacienteActual, {});

    //Listeners para agregado de formulas desarrolladas
    formulasDesarrolladasDetailUI.removeOnAddListener(onAddFormulaDesarrollada, formulasDesarrolladasDetailUI);
    formulasDesarrolladasDetailUI.addOnAddListener(onAddFormulaDesarrollada, formulasDesarrolladasDetailUI);

    ////Listeners para recargar la tabla de alimentos
    formulasDesarrolladasModel.removeOnRowLoadListener(cargarAlimentosFormula, formulasDesarrolladasDetailUI);
    formulasDesarrolladasModel.addOnRowLoadListener(cargarAlimentosFormula, formulasDesarrolladasDetailUI);

    formulasDesarrolladasModel.removeOnRowLoadListener(calcularFormulaSitetica, formulasDesarrolladasDetailUI);
    formulasDesarrolladasModel.addOnRowLoadListener(calcularFormulaSitetica, formulasDesarrolladasDetailUI);

    formulasDesarrolladasModel.setColumnValue("FormulaDesarrollada", "paciente_id", pacienteModel.idColumn.value);
    formulasDesarrolladasModel.setFilter("FormulaDesarrollada", "paciente_id", pacienteModel.idColumn.value);

    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "req_proteico", calcularFormulaSitetica, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "req_proteico", calcularFormulaSitetica, formulasDesarrolladasModel);

    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "evaluacion_id", calcularFormulaSitetica, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "evaluacion_id", calcularFormulaSitetica, formulasDesarrolladasModel);

    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "vet", calcularFormulaSitetica, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "vet", calcularFormulaSitetica, formulasDesarrolladasModel);
    
    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "porcentaje_hc", calcularFormulaSitetica, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "porcentaje_hc", calcularFormulaSitetica, formulasDesarrolladasModel);
    
    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "porcentaje_gr", calcularFormulaSitetica, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "porcentaje_gr", calcularFormulaSitetica, formulasDesarrolladasModel);

    formulasDesarrolladasModel.removeOnColumnValueChangedListener("FormulaDesarrollada", "actual_ideal", actualizarActId, formulasDesarrolladasModel);
    formulasDesarrolladasModel.addOnColumnValueChangedListener("FormulaDesarrollada", "actual_ideal", actualizarActId, formulasDesarrolladasModel);

    cargarFormulasPacienteActual();

    formulasDesarrolladasDetailUI.add();

    $("#formulasdys").accordion({autoHeight: false});
}

function initFormulaDesarrolladaDetailUI(){
    formulasDesarrolladasModel.clearColumns();

    formulasDesarrolladasModel.removeIdChangedListener(formulaDesarrolladaDetailSelect, formulasDesarrolladasDetailUI);
    formulasDesarrolladasDetailUI = new DetailUI("Fórmula Desarrollada");

    formulasDesarrolladasDetailUI.setModel(formulasDesarrolladasModel);
    formulasDesarrolladasDetailUI.setTitleContainer(document.getElementById("formula_detail_title"));
    formulasDesarrolladasDetailUI.setMessageContainer(document.getElementById("errorMessage"));

    formulasDesarrolladasDetailUI.setAddButton(document.getElementById("add_formula"));
    formulasDesarrolladasDetailUI.setEditButton(document.getElementById("edit_formula"));
    formulasDesarrolladasDetailUI.setDelButton(document.getElementById("del_formula"));

    formulasDesarrolladasDetailUI.setOkButton(document.getElementById("sbtguardar"));

    formulasDesarrolladasModel.addColumn("FormulaDesarrollada", "id", "string", 1, true);
    formulasDesarrolladasModel.addColumn("FormulaDesarrollada", "paciente_id", "string", 1, false);
    formulasDesarrolladasDetailUI.addField(document.getElementById("alimentos"), "FormulaDesarrollada", "alimentos", "string", 1, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("fecha"), "FormulaDesarrollada", "fecha", "date", 10, false);
    formulasDesarrolladasDetailUI.addField(document.getElementById("descripcion"), "FormulaDesarrollada", "descripcion", "string", 1, true);

    formulasDesarrolladasDetailUI.addField(document.getElementById("req_proteico"), "FormulaDesarrollada", "req_proteico", "number", 10, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("evaluacion_id"), "FormulaDesarrollada", "evaluacion_id", "number", 10, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("vet"), "FormulaDesarrollada", "vet", "number", 10, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("porc_hc"), "FormulaDesarrollada", "porcentaje_hc", "number", 10, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("porc_gr"), "FormulaDesarrollada", "porcentaje_gr", "number", 10, true);
    formulasDesarrolladasDetailUI.addField(document.getElementById("act_id"), "FormulaDesarrollada", "actual_ideal", "string", 1, true);

    formulasDesarrolladasDetailUI.addOnAddListener(limpiarAlimentos, formulasDesarrolladasDetailUI);

    initTablaAlimentos();
    showAlimentos();
}

function initTablaAlimentos(){
    arrAlimentos = new Array();

    dataAlimentos[0] = {
        id: 0,
        alimento: "",
        carbohidratos_total_g: 0,
        proteinas_g: 0,
        grasa_total_g: 0,
        energia_kcal: 0,
        ajuste_g_cal: 0,

        energia_kj: 0,
        agua_g: 0,
        carbohidratos_disponible_g: 0,
        fibra_g: 0,
        cenizas_g: 0,
        sodio_mg: 0,
        potasio_mg: 0,
        calcio_mg: 0,
        fosforo_mg: 0,
        hierro_mg: 0,
        zinc_mg: 0,
        tiamina_mg: 0,
        rivoflavina_mg: 0,
        niacina_mg: 0,
        vitamina_c_mg: 0,
        ac_gr_saturados_g: 0,
        ac_gr_monoinsaturados_g: 0,
        ac_gr_poliinsaturados_g: 0,
        colesterol_mg: 0,
        AGPw6: 0,
        AGPW3: 0
    };

    jQuery("#formula_alimentos_table").jqGrid({
            datatype: "local",
            height: 250,
            width: 800,
            colNames:['Id','Alimento','Cantidad', 'Carbonohidratos', 'Proteínas','Grasas', 'KCal', 'Ajuste'
                      ,'Energía(kj)','Agua(g)','Carbohidratos Disponible(g)','Fibra(g)','Cenizas(g)','Sodio(mg)','Potasio(mg)','Calcio(mg)'
                      ,'Fósforo(mg)','Hierro(mg)','Zinc(mg)','Tiamina(mg)','Rivoflavina(mg)','Niacina(mg)','Vitamina C(mg)','A.G.Saturados(g)'
                      ,'A.G.Monoinsaturados(g)','AG.Poliinsaturados(g)','Colesterol(mg)','AGPw6','AGPW3'],

            colModel:[
                    {name:'id',index:'id', width:90, editable: false, sorttype:"int", hidden: true},
                    {name:'alimento',index:'alimento',width:330, editable:true, sorttype:"string"},
                    {name:'cantidad',index:'cantidad', width:80,editable: true, sorttype:"int"},
                    {name:'carbohidratos_total_g',index:'carbohidratos_total_g', width:80, editable: false, sorttype:"int"},
                    {name:'proteinas_g',index:'proteinas_g', width:80, editable: false, sorttype:"int"},
                    {name:'grasa_total_g',index:'grasa_total_g', width:80, editable: false, sorttype:"int"},
                    {name:'energia_kcal',index:'energia_kcal', width:80, editable: false, sorttype:"int"},
                    {name:'ajuste_g_cal',index:'ajuste_g_cal', width:80, editable: false, sorttype:"int", hidden: true},

                    {name:'energia_kj',index:'energia_kj', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'agua_g',index:'agua_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'carbohidratos_disponible_g',index:'carbohidratos_disponible_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'fibra_g',index:'fibra_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'cenizas_g',index:'cenizas_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'sodio_mg',index:'sodio_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'potasio_mg',index:'potasio_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'calcio_mg',index:'calcio_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'fosforo_mg',index:'fosforo_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'hierro_mg',index:'hierro_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'zinc_mg',index:'zinc_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'tiamina_mg',index:'tiamina_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'rivoflavina_mg',index:'rivoflavina_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'niacina_mg',index:'niacina_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'vitamina_c_mg',index:'vitamina_c_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'ac_gr_saturados_g',index:'ac_gr_saturados_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'ac_gr_monoinsaturados_g',index:'ac_gr_monoinsaturados_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'ac_gr_poliinsaturados_g',index:'ac_gr_poliinsaturados_g', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'colesterol_mg',index:'colesterol_mg', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'AGPw6',index:'AGPw6', width:80, editable: false, sorttype:"int", hidden: true},
                    {name:'AGPW3',index:'AGPW3', width:80, editable: false, sorttype:"int", hidden: true}
            ],
            onSelectRow: editRow,
            caption: "Fórmula Desarrollada",
            toolbar: [true,"bottom"],
            onRightClickRow: function(){
                ocultarColumans();
            },
            shrinkToFit:false
    });

    $("#formula_alimentos_table").jqGrid('navGrid','#formula_alimentos_pager',{edit:false,add:false,del:false,search:false,refresh:false});
    
    $("#t_formula_alimentos_table").append("<input type='button' id='delBtn' value='Borrar'/ style='float: left;'>");
    $("#t_formula_alimentos_table").append("<div id='totales'></div>");
    $("#t_formula_alimentos_table").css("height", "70px");
    $("#t_formula_alimentos_table").append($("#total_container").html());
    $('#delBtn').button();
    $('#delBtn').click(function(){
        var rowId = jQuery("#formula_alimentos_table").jqGrid('getGridParam','selrow');
        if(rowId < arrAlimentos.length){
            var del = confirm("¿Desea borrar la fila seleccionada?");
            if(del){
                arrAlimentos.splice(rowId, 1);
                showAlimentos();
                lastsel3 = undefined;
                editRow(rowId);
                $("#"+rowId+"_alimento").focus();
            }
        }
    });
}

function ocultarColumans(){
        jQuery("#formula_alimentos_table").setColumns({
            resize: false,
            width: 400,
            beforeShowForm: function(id){
                $(id).parent().css("height", "300");
                $(id).parent().css("overflow", "auto");
            },
            afterSubmitForm: function(){
                setAlimentos();
            }
        });
}

function showAlimentos(){
    
    jQuery("#formula_alimentos_table").jqGrid('clearGridData');
    for(var i=0; i<arrAlimentos.length; i++){
	jQuery("#formula_alimentos_table").jqGrid('addRowData',i,arrAlimentos[i]);
    }
    jQuery("#formula_alimentos_table").jqGrid('addRowData',arrAlimentos.length,{
        id:0,
        alimento:"",
        cantidad:0,
        carbohidratos_total_g:0,
        proteinas_g:0,
        grasa_total_g:0,
        energia_kcal:0,
        ajuste_g_cal: 0,

        energia_kj: 0,
        agua_g: 0,
        carbohidratos_disponible_g: 0,
        fibra_g: 0,
        cenizas_g: 0,
        sodio_mg: 0,
        potasio_mg: 0,
        calcio_mg: 0,
        fosforo_mg: 0,
        hierro_mg: 0,
        zinc_mg: 0,
        tiamina_mg: 0,
        rivoflavina_mg: 0,
        niacina_mg: 0,
        vitamina_c_mg: 0,
        ac_gr_saturados_g: 0,
        ac_gr_monoinsaturados_g: 0,
        ac_gr_poliinsaturados_g: 0,
        colesterol_mg: 0,
        AGPw6: 0,
        AGPW3: 0
    });
    calcularTotales();
    setAlimentos();
}

function setAlimentos(){
    $("#alimentos").val(JSON.stringify(arrAlimentos));
    $("#alimentos").change();
}

function autoComplete(id){
	$("#"+id+"_alimento","#formula_alimentos_table").autocomplete({
            source: getAlimentos,
            minLength: 2,
            select: function(event, ui){onAlimentoSelect(event, ui, id);}
        });

        $("#"+id+"_alimento","#formula_alimentos_table").change(function(){
            actualizarFilaAlimento(id);
        });
        $("#"+id+"_alimento","#formula_alimentos_table").keydown(function(evt){
            if(evt.keyCode == 13){
                $(this).change();
                return false;
            }
            $("#"+id+"_alimento","#formula_alimentos_table").autocomplete("disable");
            if($("#"+id+"_alimento","#formula_alimentos_table").val() == ""){
                actualizarFilaAlimento(id);
            }
        });
        $("#"+id+"_alimento","#formula_alimentos_table").keydown(function(evt){
            if(evt.keyCode == 13){
                $(this).change();
                return false;
            }
            if($("#"+id+"_alimento","#formula_alimentos_table").val() == ""){
                actualizarFilaAlimento(id);
            }
            $("#"+id+"_alimento","#formula_alimentos_table").autocomplete("enable");
        });

        $("#"+id+"_cantidad","#formula_alimentos_table").change(function(){
            actualizarFilaAlimento(id);
        });
        $("#"+id+"_cantidad","#formula_alimentos_table").keydown(function(evt){
            if(evt.keyCode == 13){
                $(this).change();
                return false;
            }
            if($("#"+id+"_cantidad","#formula_alimentos_table").val() == ""){
                actualizarFilaAlimento(id);
            }
        });
}

function actualizarFilaAlimento(rowId){
    if(arrAlimentos[rowId] == undefined){
        return;
    }
    var alimentoId =  arrAlimentos[rowId]["id"];
    var alimento = dataAlimentos[alimentoId];
    var cantidad = Number($("#"+rowId+'_cantidad').val());
    

    var data = {
        id: alimentoId,
        label: alimento.alimento,
        cantidad: cantidad,
        carbohidratos_total_g: alimento.carbohidratos_total_g,
        proteinas_g: alimento.proteinas_g,
        grasa_total_g: alimento.grasa_total_g,
        energia_kcal: alimento.energia_kcal,
        ajuste_g_cal: alimento.ajuste_g_cal,
        
        energia_kj: alimento.energia_kj,
        agua_g: alimento.agua_g,
        carbohidratos_disponible_g: alimento.carbohidratos_disponible_g,
        fibra_g: alimento.fibra_g,
        cenizas_g: alimento.cenizas_g,
        sodio_mg: alimento.sodio_mg,
        potasio_mg: alimento.potasio_mg,
        calcio_mg: alimento.calcio_mg,
        fosforo_mg: alimento.fosforo_mg,
        hierro_mg: alimento.hierro_mg,
        zinc_mg: alimento.zinc_mg,
        tiamina_mg: alimento.tiamina_mg,
        rivoflavina_mg: alimento.rivoflavina_mg,
        niacina_mg: alimento.niacina_mg,
        vitamina_c_mg: alimento.vitamina_c_mg,
        ac_gr_saturados_g: alimento.ac_gr_saturados_g,
        ac_gr_monoinsaturados_g: alimento.ac_gr_monoinsaturados_g,
        ac_gr_poliinsaturados_g: alimento.ac_gr_poliinsaturados_g,
        colesterol_mg: alimento.colesterol_mg,
        AGPw6: alimento.AGPw6,
        AGPW3: alimento.AGPW3

    };

    agregarFilaAlimento(rowId, data);

    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_carbohidratos_total_g']").text(arrAlimentos[rowId]["carbohidratos_total_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_proteinas_g']").text(arrAlimentos[rowId]["proteinas_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_grasa_total_g']").text(arrAlimentos[rowId]["grasa_total_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_energia_kcal']").text(arrAlimentos[rowId]["energia_kcal"]);

    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_energia_kj']").text(arrAlimentos[rowId]["energia_kj"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_agua_g']").text(arrAlimentos[rowId]["agua_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_carbohidratos_disponible_g']").text(arrAlimentos[rowId]["carbohidratos_disponible_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_fibra_g']").text(arrAlimentos[rowId]["fibra_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_cenizas_g']").text(arrAlimentos[rowId]["cenizas_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_sodio_mg']").text(arrAlimentos[rowId]["sodio_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_potasio_mg']").text(arrAlimentos[rowId]["potasio_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_calcio_mg']").text(arrAlimentos[rowId]["calcio_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_fosforo_mg']").text(arrAlimentos[rowId]["fosforo_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_hierro_mg']").text(arrAlimentos[rowId]["hierro_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_zinc_mg']").text(arrAlimentos[rowId]["zinc_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_tiamina_mg']").text(arrAlimentos[rowId]["tiamina_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_rivoflavina_mg']").text(arrAlimentos[rowId]["rivoflavina_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_niacina_mg']").text(arrAlimentos[rowId]["niacina_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_vitamina_c_mg']").text(arrAlimentos[rowId]["vitamina_c_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_ac_gr_saturados_g']").text(arrAlimentos[rowId]["ac_gr_saturados_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_ac_gr_monoinsaturados_g']").text(arrAlimentos[rowId]["ac_gr_monoinsaturados_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_ac_gr_poliinsaturados_g']").text(arrAlimentos[rowId]["ac_gr_poliinsaturados_g"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_colesterol_mg']").text(arrAlimentos[rowId]["colesterol_mg"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_AGPw6']").text(arrAlimentos[rowId]["AGPw6"]);
    $("#formula_alimentos_table").find("#"+rowId).find("td[aria-describedby='formula_alimentos_table_AGPW3']").text(arrAlimentos[rowId]["AGPW3"]);

    if(cantidad != 0 && alimentoId != 0){
        showAlimentos();
        editRow(arrAlimentos.length);
        $("#"+(arrAlimentos.length)+"_alimento").focus();
    }
}

function calcularTotales(){
    var totalCh   = Number(0);
    var totalProt = Number(0);
    var totalGr   = Number(0);
    var totalKcal = Number(0);
    var totalGramos = Number(0);
    var gCh       = Number($("#g_hc").val());
    var gGr       = Number($("#g_gr").val());
    var gProt     = Number($("#g_prot").val());

    var arrTotales = new Object();

    for(var i=0; i<arrAlimentos.length; i++){
        var al = arrAlimentos[i];

        for(var j in al){
            if(arrTotales[j] == undefined){
                arrTotales[j] = Number(0);
            }
            arrTotales[j] = Number(arrTotales[j]) + Number(al[j]);
        }
        
        totalCh   += Number(al.carbohidratos_total_g);
        totalProt += Number(al.proteinas_g);
        totalGr   += Number(al.grasa_total_g);
        totalKcal += Number(al.energia_kcal);
        totalGramos += (Number(al.cantidad) * Number(al.ajuste_g_cal));
    }

    for(var j in arrTotales){
        if(j != "alimento" && j != "cantidad"){
            var header = String($("#jqgh_"+j).html());
            var index = header.indexOf("<br />");

            if(index == -1){
                header = header.substr(0, header.indexOf("<", 0))+"<br />"+arrTotales[j]+header.substr(header.indexOf("<", 0), header.length);
            }else{
                header = header.substr(0, index+6)+arrTotales[j]+header.substr(header.indexOf("<span", 0), header.length);
            }
            $("#jqgh_"+j).html(header);
            $("#jqgh_"+j).css("height", "34px");
        }
    }

    var vet = Number($("#vet").val());
    var porcCh   = totalCh * 400 / vet;
    var porcProt = totalProt * 400 / vet;
    var porcGr   = totalGr * 900 / vet;
    var densidadCalorica = totalKcal / totalGramos;
    var gramoCaloria = totalGramos / totalKcal;

    if(arrAlimentos.length == 0){
       porcCh   = 0;
       porcProt = 0;
       porcGr   = 0;
    }

    var difHc = Number(totalCh - gCh);
    var difProt = Number(totalProt - gProt);
    var difGr = Number(totalGr - gGr);
    var difKcal = Number(totalKcal - vet);
    
    $("#total_ch").text("HC: "+totalCh.toFixed(2));
    $("#total_prot").text("Prot: "+totalProt.toFixed(2));
    $("#total_gr").text("Gr: "+totalGr.toFixed(2));
    $("#total_kcal").text("Kcal: "+totalKcal.toFixed(2));
    
    $("#porc_hc2").text("HC: "+porcCh.toFixed(2)+"%");
    $("#porc_prot2").text("Prot: "+porcProt.toFixed(2)+"%");
    $("#porc_gr2").text("Gr: "+porcGr.toFixed(2)+"%");
    $("#porc_kcal2").text("VET: "+Number($("#vet").val()));

    $("#dif_hc").text(difHc.toFixed(2));
    $("#dif_prot").text(difProt.toFixed(2));
    $("#dif_gr").text(difGr.toFixed(2));
    $("#dif_kcal").text(difKcal.toFixed(2));

    $("#densidad_calorica").text(densidadCalorica.toFixed(2));
    $("#gramo_caloria").text(gramoCaloria.toFixed(2));
    
    resaltarDiferencia(difHc, "#dif_hc");
    resaltarDiferencia(difProt, "#dif_prot");
    resaltarDiferencia(difGr, "#dif_gr");
    resaltarDiferencia(difKcal, "#dif_kcal");
}

function resaltarDiferencia(diferencia, campo){
    if(Math.abs(diferencia) <= 5){
        $(campo).css("color", "#000000");
        $(campo).css("font-weight", "normal");
    }else{
        $(campo).css("color", "#FF0000");
        $(campo).css("font-weight", "bold");
    }
}

function limpiarAlimentos(){
    arrAlimentos = new Array();
    showAlimentos();
}

function editRow(id){
    if(id && id!==lastsel3){
        jQuery('#formula_alimentos_table').jqGrid('restoreRow',lastsel3);
        jQuery('#formula_alimentos_table').jqGrid('editRow',id,true,autoComplete);
        lastsel3=id;
    }
}

function onAlimentoSelect(event, ui, rowId){
    agregarDataAlimento(ui.item);

    agregarFilaAlimento(rowId, ui.item);

    actualizarFilaAlimento(rowId);
}

function agregarDataAlimento(data){
    dataAlimentos[data.id] = {
        id: data.id,
        alimento: data.label,
        carbohidratos_total_g: Number(data.carbohidratos_total_g),
        proteinas_g: Number(data.proteinas_g),
        grasa_total_g: Number(data.grasa_total_g),
        energia_kcal: Number(data.energia_kcal),
        ajuste_g_cal: Number(data.ajuste_g_cal),

        energia_kj: Number(data.energia_kj),
        agua_g: Number(data.agua_g),
        carbohidratos_disponible_g: Number(data.carbohidratos_disponible_g),
        fibra_g: Number(data.fibra_g),
        cenizas_g: Number(data.cenizas_g),
        sodio_mg: Number(data.sodio_mg),
        potasio_mg: Number(data.potasio_mg),
        calcio_mg: Number(data.calcio_mg),
        fosforo_mg: Number(data.fosforo_mg),
        hierro_mg: Number(data.hierro_mg),
        zinc_mg: Number(data.zinc_mg),
        tiamina_mg: Number(data.tiamina_mg),
        rivoflavina_mg: Number(data.rivoflavina_mg),
        niacina_mg: Number(data.niacina_mg),
        vitamina_c_mg: Number(data.vitamina_c_mg),
        ac_gr_saturados_g: Number(data.ac_gr_saturados_g),
        ac_gr_monoinsaturados_g: Number(data.ac_gr_monoinsaturados_g),
        ac_gr_poliinsaturados_g: Number(data.ac_gr_poliinsaturados_g),
        colesterol_mg: Number(data.colesterol_mg),
        AGPw6: Number(data.AGPw6),
        AGPW3: Number(data.AGPW3)
    };
}

function agregarFilaAlimento(rowId, data){
    if(arrAlimentos[rowId] == undefined){
        arrAlimentos[rowId] = new Object();
    }
    arrAlimentos[rowId]["id"] = data.id;
    arrAlimentos[rowId]["alimento"] = data.label;
    
    var hc = (data.cantidad * data.carbohidratos_total_g / 100).toFixed(2);
    var prot = (data.cantidad * data.proteinas_g / 100).toFixed(2);
    var gr = (data.cantidad * data.grasa_total_g / 100).toFixed(2);
    var energia = (data.cantidad * data.energia_kcal / 100).toFixed(2);
    var ajuste = data.ajuste_g_cal;

    var energia_kj = (data.cantidad * data.energia_kj / 100).toFixed(2);
    var agua_g = (data.cantidad * data.agua_g / 100).toFixed(2);
    var carbohidratos_disponible_g = (data.cantidad * data.carbohidratos_disponible_g / 100).toFixed(2);
    var fibra_g = (data.cantidad * data.fibra_g / 100).toFixed(2);
    var cenizas_g = (data.cantidad * data.cenizas_g / 100).toFixed(2);
    var sodio_mg = (data.cantidad * data.sodio_mg / 100).toFixed(2);
    var potasio_mg = (data.cantidad * data.potasio_mg / 100).toFixed(2);
    var calcio_mg = (data.cantidad * data.calcio_mg / 100).toFixed(2);
    var fosforo_mg = (data.cantidad * data.fosforo_mg / 100).toFixed(2);
    var hierro_mg = (data.cantidad * data.hierro_mg / 100).toFixed(2);
    var zinc_mg = (data.cantidad * data.zinc_mg / 100).toFixed(2);
    var tiamina_mg = (data.cantidad * data.tiamina_mg / 100).toFixed(2);
    var rivoflavina_mg = (data.cantidad * data.rivoflavina_mg / 100).toFixed(2);
    var niacina_mg = (data.cantidad * data.niacina_mg / 100).toFixed(2);
    var vitamina_c_mg = (data.cantidad * data.vitamina_c_mg / 100).toFixed(2);
    var ac_gr_saturados_g = (data.cantidad * data.ac_gr_saturados_g / 100).toFixed(2);
    var ac_gr_monoinsaturados_g = (data.cantidad * data.ac_gr_monoinsaturados_g / 100).toFixed(2);
    var ac_gr_poliinsaturados_g = (data.cantidad * data.ac_gr_poliinsaturados_g / 100).toFixed(2);
    var colesterol_mg = (data.cantidad * data.colesterol_mg / 100).toFixed(2);
    var AGPw6 = (data.cantidad * data.AGPw6 / 100).toFixed(2);
    var AGPW3 = (data.cantidad * data.AGPW3 / 100).toFixed(2);

    arrAlimentos[rowId]["cantidad"] = Number(data.cantidad);
    arrAlimentos[rowId]["carbohidratos_total_g"] = hc;
    arrAlimentos[rowId]["proteinas_g"] = prot;
    arrAlimentos[rowId]["grasa_total_g"] = gr;
    arrAlimentos[rowId]["energia_kcal"] = energia;
    arrAlimentos[rowId]["ajuste_g_cal"] = ajuste;
    
    arrAlimentos[rowId]["energia_kj"] = energia_kj;
    arrAlimentos[rowId]["agua_g"] = agua_g;
    arrAlimentos[rowId]["carbohidratos_disponible_g"] = carbohidratos_disponible_g;
    arrAlimentos[rowId]["fibra_g"] = fibra_g;
    arrAlimentos[rowId]["cenizas_g"] = cenizas_g;
    arrAlimentos[rowId]["sodio_mg"] = sodio_mg;
    arrAlimentos[rowId]["potasio_mg"] = potasio_mg;
    arrAlimentos[rowId]["calcio_mg"] = calcio_mg;
    arrAlimentos[rowId]["fosforo_mg"] = fosforo_mg;
    arrAlimentos[rowId]["hierro_mg"] = hierro_mg;
    arrAlimentos[rowId]["zinc_mg"] = zinc_mg;
    arrAlimentos[rowId]["tiamina_mg"] = tiamina_mg;
    arrAlimentos[rowId]["rivoflavina_mg"] = rivoflavina_mg;
    arrAlimentos[rowId]["niacina_mg"] = niacina_mg;
    arrAlimentos[rowId]["vitamina_c_mg"] = vitamina_c_mg;
    arrAlimentos[rowId]["ac_gr_saturados_g"] = ac_gr_saturados_g;
    arrAlimentos[rowId]["ac_gr_monoinsaturados_g"] = ac_gr_monoinsaturados_g;
    arrAlimentos[rowId]["ac_gr_poliinsaturados_g"] = ac_gr_poliinsaturados_g;
    arrAlimentos[rowId]["colesterol_mg"] = colesterol_mg;
    arrAlimentos[rowId]["AGPw6"] = AGPw6;
    arrAlimentos[rowId]["AGPW3"] = AGPW3;


}

function getAlimentos(request, response){
    var term = request.term;
    if ( term in cache ) {
            response( cache[ term ] );
            return;
    }

    lastXhr = $.getJSON( webRoot+"Alimentos/getAlimentos/"+term, request, function( data, status, xhr ) {
        var data2 = new Array();
        for(var i=0; i<data.length; i++){
            data2[i] = procesarAlimento(data[i]);
        }
        cache[ term ] = data2;
        if ( xhr === lastXhr ) {
                response( data2 );
        }
    });
}

function procesarAlimento(alimento){
    var chTotal = Number(alimento.Alimento.carbohidratos_total_g);
    if(chTotal == 0){
        chTotal = Number(alimento.Alimento.carbohidratos_disponible_g);
    }
    return {
        id:alimento.Alimento.id,
        label:alimento.Alimento.alimento,
        value: alimento.Alimento.alimento,
        carbohidratos_total_g: chTotal ,
        proteinas_g: alimento.Alimento.proteinas_g,
        grasa_total_g: alimento.Alimento.grasa_total_g,
        energia_kcal:alimento.Alimento.energia_kcal,
        ajuste_g_cal:alimento.Alimento.ajuste_g_cal,

        energia_kj: alimento.Alimento.energia_kj,
        agua_g: alimento.Alimento.agua_g,
        carbohidratos_disponible_g: alimento.Alimento.carbohidratos_disponible_g,
        fibra_g: alimento.Alimento.fibra_g,
        cenizas_g: alimento.Alimento.cenizas_g,
        sodio_mg: alimento.Alimento.sodio_mg,
        potasio_mg: alimento.Alimento.potasio_mg,
        calcio_mg: alimento.Alimento.calcio_mg,
        fosforo_mg: alimento.Alimento.fosforo_mg,
        hierro_mg: alimento.Alimento.hierro_mg,
        zinc_mg: alimento.Alimento.zinc_mg,
        tiamina_mg: alimento.Alimento.tiamina_mg,
        rivoflavina_mg: alimento.Alimento.rivoflavina_mg,
        niacina_mg: alimento.Alimento.niacina_mg,
        vitamina_c_mg: alimento.Alimento.vitamina_c_mg,
        ac_gr_saturados_g: alimento.Alimento.ac_gr_saturados_g,
        ac_gr_monoinsaturados_g: alimento.Alimento.ac_gr_monoinsaturados_g,
        ac_gr_poliinsaturados_g: alimento.Alimento.ac_gr_poliinsaturados_g,
        colesterol_mg: alimento.Alimento.colesterol_mg,
        AGPw6: alimento.Alimento.AGPw6,
        AGPW3: alimento.Alimento.AGPW3
    };
}

function cargarAlimentosFormula(data){
    arrAlimentos = new Array();
    var alimentos = data.data[0]["FormulaDesarrollada"]["alimentos"];
    if(alimentos != undefined){
        for(var i=0; i<alimentos.length; i++){
            var al = procesarAlimento(alimentos[i]);
            al.cantidad = alimentos[i].FormulaAlimento.cantidad;
            agregarDataAlimento(al);
            agregarFilaAlimento(i, al);
        }
    }
    showAlimentos();
}

function pacienteFormulaDesarrolladaSelect(id, context){
    formulasDesarrolladasDetailUI.add();

    context.setColumnValue("FormulaDesarrollada", "paciente_id", id);
    context.setFilter("FormulaDesarrollada", "paciente_id", id);

    context.idColumn.value = undefined;

    cargarFormulasDesarrolladasPaciente(id);
    getEvaluacionesPesoPaciente(id);
}

function formulaDesarrolladaDetailSelect(id, context){
    context.edit();
}

function onAddFormulaDesarrollada(context){
    formulasDesarrolladasModel.idColumn.value = undefined;
    setFechaActual("fecha");
    $("#formulas").val("0");
}

function cargarFormulasDesarrolladasPaciente(id){
    //getEvaluacionesPaciente
    $.getJSON(webRoot+"FormulasDesarrolladas/getFormulasDesarrolladasPaciente/"+id+"/"+Math.random()*100, {}, function(data){
        var html = "<option value='0'>-</option>";
        for(var key in data.data){
            html += "<option value='"+key+"'>"+formatDate(data.data[key])+"</option>";
        }

        $('#formulas').html(html);

        if(formulasDesarrolladasModel.idColumn.value != undefined){
            $('#formulas').val(formulasDesarrolladasModel.idColumn.value);
        }
    });

    $('#formulas').change(function(){
        if(Number($(this).val()) > 0){
            formulasDesarrolladasModel.setEntityId($(this).val());
        }else{
            formulasDesarrolladasDetailUI.add();
            formulasDesarrolladasModel.idColumn.value = undefined;
        }
    });
}

function getEvaluacionesPesoPaciente(id){
    //getEvaluacionesPaciente
    $.getJSON(webRoot+"Evaluaciones/getPesosPaciente/"+id+"/"+Math.random()*100, {}, function(data){
        var html = "";
        for(var i=0; i<data.length; i++){
            var d = data[i].Evaluacion;
            html += "<option value='"+d.id+"' peso='"+d.peso+"' peso_ideal='"+d.peso_ideal+"'>"+d.peso+" - "+d.peso_ideal+" - "+formatDate(d.fecha)+"</option>";
        }

        $('#evaluacion_id').html(html);

        var evalId = formulasDesarrolladasModel.getColumnValue('FormulaDesarrollada', 'evaluacion_id');
        if(evalId != '' && evalId != undefined && evalId != null && evalId != 0){
            $('#evaluacion_id').val(evalId);
        }
    });

    $('#evaluacion_id').change(function(){
        if(Number($(this).val()) > 0){
            formulasDesarrolladasModel.setColumnValue('FormulaDesarrollada', 'evaluacion_id', $("#evaluacion_id").val());
        }else{
            formulasDesarrolladasModel.setColumnValue('FormulaDesarrollada', 'evaluacion_id', 0);
        }
    });

    $('#evaluacion_id').change();
}

function cargarFormulasPacienteActual(){
    cargarFormulasDesarrolladasPaciente(pacienteModel.idColumn.value);
    getEvaluacionesPesoPaciente(pacienteModel.idColumn.value);
}

function calcularFormulaSitetica(){
    var peso        = Number($("#evaluacion_id option:selected").attr("peso"));
    var reqProteico = Number($("#req_proteico").val());
    var vet         = Number($("#vet").val());
    var gProt       = 0;Number($("#vet").val());
    var kcalProt    = 0;
    var porcProt    = 0;
    var porcHc      = Number($("#porc_hc").val());
    var porcGr      = Number($("#porc_gr").val());
    var kcalHc      = 0;
    var gHc         = 0;
    var kcalGr      = 0;
    var gGr         = 0;
    var act_id      = formulasDesarrolladasModel.getColumnValue('FormulaDesarrollada', 'actual_ideal');

    if(act_id == "ideal"){
        peso = Number($("#evaluacion_id option:selected").attr("peso_ideal"));
    }else{
        peso = Number($("#evaluacion_id option:selected").attr("peso"));
    }

    if(peso > 0 && reqProteico > 0){
        gProt       = peso * reqProteico;
        kcalProt    = gProt * 4;
    }

    if(vet > 0){
        porcProt = kcalProt * 100 / vet;
        kcalHc   = vet * porcHc / 100;
        kcalGr   = vet * porcGr / 100;
        gHc      = kcalHc / 4;
        gGr      = kcalGr / 9;
    }

    /*if(Math.round(porcProt) + Math.round(porcHc) + Math.round(porcGr) > 100){
        alert("Error: Los porcentajes ingresados superan el VET.");
    }*/

    $("#g_prot").val(Math.round(gProt));
    $("#kcal_prot").val(Math.round(kcalProt));
    $("#porc_prot").val(Math.round(porcProt));
    $("#kcal_hc").val(Math.round(kcalHc));
    $("#kcal_gr").val(Math.round(kcalGr));
    $("#g_hc").val(Math.round(gHc));
    $("#g_gr").val(Math.round(gGr));

    calcularTotales();
}

function actualizarActId(){
    var actId = formulasDesarrolladasModel.getColumnValue('FormulaDesarrollada', 'actual_ideal');
    var radioActId = $("input[name=actual_ideal]:checked").val();

    if(actId == ""){
        actId = "actual";
        formulasDesarrolladasModel.setColumnValue('FormulaDesarrollada', 'actual_ideal', actId);
        return;
    }

    if(actId != radioActId){
        $("input[name=actual_ideal]").each(function(){
            if($(this).val() == actId){
                $(this).attr("checked", true);
            }else{
                this.removeAttribute("checked")
            }
        });
    }
 
    calcularFormulaSitetica();
}